<?php
if (!defined('IS_INITPHP')) exit('Access Denied!');
/*********************************************************************************
 * InitPHP 3.3 国产PHP开发框架  - 工具库 - 验证库
 *-------------------------------------------------------------------------------
 * 版权所有: CopyRight By iceman
 * 您可以自由使用该源码，但是在使用过程中，请保留作者信息。尊重他人劳动成果就是尊重自己
 *-------------------------------------------------------------------------------
 * $Author:iceman
 * $Dtime:2014-1-4
***********************************************************************************/
class fieldvalidateInit {

	/**
	 * 类型限制
	 * @param string $type
	 * @param null $data
	 */
	public function type_limit($data = NULL, $type = '')
	{
		switch ($type)
		{
			case 'tinyint': case 'smallint': case 'int': case 'bigint':
				return is_int($data);
				break;
			case 'double':
				return is_double($data);
				break;
			case 'float':
				return is_float($data);
				break;
			case 'real':
				return is_real($data);
				break;
			case 'boolean':
				return is_bool($data);
				break;
			case 'char': case 'varchar': case 'text': case 'longtext':
				return is_string($data) && ! empty($data);
				break;
			case 'year'://只接受 1xxx 和 2xxx 年
				return (bool) preg_match('/^[1|2][0-9]{3}$/', $data);
				break;
			case 'date'://接受 yyyymmdd 顺序的任何格式（即分隔符可以为 - . / 等，但不可为空格） 
				preg_match_all('/[0-9]+/', $data, $a);
				$a = $a[0];
				return (bool) (count($a) == 3 && checkdate($a[1], $a[2], $a[0]) && $this->type_limit($a[0], 'year'));
				break;
			case 'time'://接受 hhmmss 顺序的任何格式（即分隔符可以为 : / . 等，但不可为空格）
				preg_match_all('/[0-9]+/', $data, $a);
				$a = $a[0];
				return ($a[0] >= 0 && $a[0] <= 24) && 
					   ($a[1] >= 0 && $a[1] < 60) && 
					   ($a[2] >= 0 && $a[2] < 60);
				break;
			case 'datetime'://接受 yyyymmdd hhmmss 顺序的任何格式，空格用于分割date和time
				$a = explode(' ', $data);
				return (bool) (count($a) == 2 && $this->type_limit($a[0], 'date') && $this->type_limit($a[1], 'time'));
				break;
			default:
				break;
		}
		
		return FALSE;
	}
	
	/**
	 * 值限制
	 * @param null $data
	 * @param string $rule
	 */
	public function value_limit($data = NULL, $rule = '')
	{
		preg_match_all('/[0-9]+/', $rule, $r);
		$r = $r[0];
		
		if (count($r) != 2)	return FALSE;
		
		if ($data >= $r[0] && $data <= $r[1])	return TRUE;
		
		return FALSE;
	}
	
	/**
	 * 长度限制
	 * @param null $data
	 * @param string $rule
	 */
	public function length_limit($data = NULL, $rule = '')
	{
		preg_match_all('/[0-9]+/', $rule, $r);
		$r = $r[0];
		
		if (count($r) != 2)	return FALSE;
		
		if (strlen($data) >= $r[0] && strlen($data) <= $r[1])	return TRUE;
		
		return FALSE;
	}

}